#include "stm32f10x.h"                  // Device header
#include "bsp_Key.h"
#include "bsp_OLED.h"
#include "bsp_Encoder.h"
#include "bsp_Timer.h"
#include "math.h"
#include "Cal_yunsuan.h"
#include "Cal_dingjifen.h"
uint8_t KeyNum;
int16_t Encoder_value;
int CurrNum=0;//临时变量1，用来存储当前输的这个数字
//_a数加到Num1个位，输入下一个数字时，Num1乘10再加上新的_a
uint16_t Num1=0;//输入的第1个数
uint16_t Num2=0;//输入的第2个数
int i;//定积分判断

int opflag=0;//运算符判断
int flag=0;//连续运算判断
double result=0;//结果

int integerPart=0;
int decimalPart=0;

int main(void)
{
	OLED_Init();
	Encoder_Init();
	Key_Init();
	Timer_Init();
	OLED_ShowString(4, 1, "=");	//显示字符串
	
	
	while (1)
	{
		
		KeyNum=Key_GetNum();//KeyNum1234代表加减乘除,5代表选定数字
		Encoder_value+=Encoder_Get();//旋转编码器数
		CurrNum=Encoder_value%10;
		OLED_ShowSignedNum(1,2,CurrNum,1);
		OLED_ShowSignedNum(1,6,Num1,7);
		OLED_ShowSignedNum(3,6,Num2,7);
		
		if(KeyNum==6)
		{
			if(opflag==0)Num1=10*Num1+CurrNum;
			if(opflag!=0)Num2=10*Num2+CurrNum;
		}
		else if(KeyNum==1)//加
		{
			if(flag==0)
			{opflag=1;flag++;OLED_ShowString(2,15,"+");}
			if(flag&&opflag==0)
			{opflag=1;flag++;OLED_ShowString(2,15,"+");Num1=result;Num2=0;}
		}
		else if(KeyNum==2)//剪
		{
			if(flag==0)
			{opflag=2;OLED_ShowString(2,15,"-");}
			if(flag&&opflag==0)
			{opflag=2;flag++;OLED_ShowString(2,15,"-");Num1=result;Num2=0;}
		}
		else if(KeyNum==3)//乘
		{
			if(flag==0)
			{opflag=3;OLED_ShowString(2,15,"*");}
			if(flag&&opflag==0)
			{opflag=3;flag++;OLED_ShowString(2,15,"*");Num1=result;Num2=0;}
		}
		else if(KeyNum==4)//除
		{
			if(flag==0)
			{opflag=4;OLED_ShowString(2,15,"/");}
			if(flag&&opflag==0)
			{opflag=4;flag++;OLED_ShowString(2,15,"/");Num1=result;Num2=0;}
			
		}
		else if(KeyNum==7)//定积分
		{
			opflag=5;OLED_ShowString(2,15,"?");
		}
		else if(KeyNum==5)
		{
			switch(opflag)
			{
			case 1:result = add(Num1, Num2);
			OLED_ShowSignedNum(4,6,result,7);opflag=0;break;
			case 2:result=sub(Num1,Num2);
			OLED_ShowSignedNum(4,6,result,7);opflag=0;break;
			case 3:result=mul(Num1,Num2);
			OLED_ShowSignedNum(4,6,result,7);opflag=0;break;
				
				
			case 4:
			{result=div(Num1,Num2);
	//OLED_ShowSignedNum(4,6,result,7);opflag=0;break;
				
    integerPart = (int)result; // 获取整数部分
	decimalPart = (int)((result - integerPart) * 100); // 获取小数部分（假设保留2位小数）
	OLED_ShowNum(4,4, integerPart,6); // 显示整数部分
	OLED_ShowString(4, 11, "."); // 显示小数点
	OLED_ShowNum(4, 12, decimalPart,2); // 显示小数部分
			
	break;}
	
			case 5:
	{result=simpsons_integral(Num1,Num2);
OLED_ShowSignedNum(4,6,result,7);opflag=0;break;
/*
	integerPart = result; // 获取整数部分
	decimalPart = (int)((result - integerPart) * 1000); // 获取小数部分（假设保留3位小数）
	OLED_ShowNum(4,6, result,6); // 显示整数部分
	OLED_ShowString(4, 11, "."); // 显示小数点
	OLED_ShowNum(4, 12, decimalPart,3); // 显示小数部分
*/
		    
 /*   int integerPart = (int)result; // 获取整数部分
    double decimalPart = result - integerPart; // 获取小数部分
	OLED_ShowNum(4,6,integerPart,6); // 显示整数部分
	OLED_ShowString(4, 11, "."); // 显示小数点
	OLED_ShowNum(4, 12, decimalPart,3); // 显示小数部分
	opflag=0;break;
		*/
	}
			
		
			}		
		}
	}
}
//定时中断
void TIM2_IRQHandler(void)
	{
	if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
	{
		Key_Tick();
		}
		TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
	}

